import com.android.build.gradle.api.BaseVariant
import org.gradle.api.Action
import org.gradle.api.Plugin
import org.gradle.api.Project

class AndroidExtension implements Plugin<Project>{

    @Override
    void apply(Project project) {
        println('引入AndroidExtensions 插件时，apply方法自动被执行')
        //创建扩展属性：android2，就可以获取对应的参数
        def andr =project.extensions.create("android2",Android2)
        //在Android2 扩展属性上创建扩展属性 defaultConfig
        andr.extensions.create("defaultConfig",DefaultConfig)
        ////project.android2.extensions.create("defaultConfig",DefaultConfig)
        //在Gradle分析之后，读取自定义插件配置的属性
        project.afterEvaluate(new Action<Project>() {
            @Override
            void execute(Project project2) {
                //只有引入了android插件，才可以在自定义的插件
                // 项目内中使用android插件提供的api，
                // Android lib 的属性：libraryVariants
                project.android.applicationVariants.all{
                    BaseVariant variant->
                        println(variant.buildType)
                }

                println("获取自定义andorid2的属性值：")
                println("android2.compileSdkVersion:"+project2.android2.compileSdkVersion)
                println("android2.defaultConfig.applicationId:"+project2.android2.defaultConfig.applicationId)
                //Todo 处理自定义插件的参数，和创建自定义的任务，至于怎么处理完全是业务方面的事了，本质上和Java 项目一样，创建一个文件还是进行通信获取，It's all depends on U
                //创建自定义任务并通过相关方法设置逻辑关系
                HelloTask task = project2.tasks.create('helloWorld',HelloTask)
                //在执行任务helloWorld之前需要先执行preBuild，当然也可以设置其他逻辑关系，
                task.dependsOn project2.tasks.getByName('checkDebugManifest')
                project2.tasks.getByName('preReleaseBuild').dependsOn task
            }
        })

/*        project.afterEvaluate {
            println("获取自定义andorid2的属性值：")
            println("android2.compileSdkVersion:"+project.android2.compileSdkVersion)
            println("android2.defaultConfig.applicationId:"+project.android2.defaultConfig.applicationId)
            //Todo 处理自定义插件的参数，和创建自定义的任务，至于怎么处理完全是业务方面的事了，本质上和Java 项目一样，创建一个文件还是进行通信获取，It's all depends on U
            //创建自定义任务并通过相关方法设置逻辑关系,在执行任务helloWorld之前需要先执行preBuild，当然也可以设置其他逻辑关系，
            HelloTask task = project.tasks.create('helloWorld',HelloTask)
            task.dependsOn project.tasks.getByName('checkDebugManifest')
            project.tasks.getByName('preReleaseBuild').dependsOn task
        }*/
    }
}